[IA64] Fix MINSTATE_GET_CURRENT
authorawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Thu, 6 Jul 2006 16:42:13 +0000 (10:42 -0600)
committerawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Thu, 6 Jul 2006 16:42:13 +0000 (10:42 -0600)
To get virtual curent address in both physcal mode and virtual mode,
add MINSTATE_GET_CURRENT_VIRT.

Signed-off-by: Akio Takebe <takebe_akio@jp.fujitsu.com>
xen/arch/ia64/linux-xen/minstate.h

index 69786cee0f526be28738c71ae1b063c650ffd1ba..b229b2d417bb56e3deae785a7203541f3393f188 100644 (file)
@@ -89,6 +89,7 @@
 # define MINSTATE_GET_CURRENT(reg)                                     \
                movl reg=THIS_CPU(cpu_kr)+IA64_KR_CURRENT_OFFSET;;      \
                ld8 reg=[reg]
+# define MINSTATE_GET_CURRENT_VIRT(reg)        MINSTATE_GET_CURRENT(reg)
 #else
 # define MINSTATE_GET_CURRENT(reg)     mov reg=IA64_KR(CURRENT)
 #endif
 #endif
 
 #ifdef MINSTATE_PHYS
+# ifdef XEN
+# define MINSTATE_GET_CURRENT(reg)                                     \
+       movl reg=THIS_CPU(cpu_kr)+IA64_KR_CURRENT_OFFSET;;              \
+       tpa reg=reg;;                                                   \
+       ld8 reg=[reg];;                                                 \
+       tpa reg=reg;;
+# define MINSTATE_GET_CURRENT_VIRT(reg)                                        \
+       movl reg=THIS_CPU(cpu_kr)+IA64_KR_CURRENT_OFFSET;;              \
+       tpa reg=reg;;                                                   \
+       ld8 reg=[reg];;
+#else
 # define MINSTATE_GET_CURRENT(reg)     mov reg=IA64_KR(CURRENT);; tpa reg=reg
+#endif /* XEN */
 # define MINSTATE_START_SAVE_MIN       MINSTATE_START_SAVE_MIN_PHYS
 # define MINSTATE_END_SAVE_MIN         MINSTATE_END_SAVE_MIN_PHYS
 #endif
        ;;                                                                                      \
 .mem.offset 0,0; st8.spill [r16]=r13,16;                                                       \
 .mem.offset 8,0; st8.spill [r17]=r21,16;       /* save ar.fpsr */                              \
-       /* XEN mov r13=IA64_KR(CURRENT);*/      /* establish `current' */                               \
-       MINSTATE_GET_CURRENT(r13);              /* XEN establish `current' */                           \
+       /* XEN mov r13=IA64_KR(CURRENT);*/      /* establish `current' */                       \
+       MINSTATE_GET_CURRENT_VIRT(r13);         /* XEN establish `current' */                   \
        ;;                                                                                      \
 .mem.offset 0,0; st8.spill [r16]=r15,16;                                                       \
 .mem.offset 8,0; st8.spill [r17]=r14,16;                                                       \